package comandos;

import java.util.ArrayList;

import model.Usuario;
import protocol.MensajeComando;
import client.ClienteSession;

public class ObtenerUsuarios implements ComandoCliente 
{
	private MensajeComando estadoOperacion;
	
	
	public void ejecutar (ClienteSession cliente, boolean invocadoPorServidor)
	{

			/*
			 *El hilo ClienteSesion esta en lectura constantemente al crearse un cliente. 
			 *invocadoPorServidor me permite saber si el comando que recibo vino del servidor 
			 *en el hilo ClienteSesion. De esta forma puedo obtener datos del servidor y 
			 *hacer una determinada accion
			 * 
			 */
			
			//Si fue invocado por el servidor (estoy recibiendo la lista de usuarios)
			if (invocadoPorServidor)
			{
				try
				{
					@SuppressWarnings("unchecked")
					ArrayList<Usuario> usuarios = (ArrayList<Usuario>) cliente.getInput().readObject();
					
					System.out.println("Lista de usuarios completa");
					for(Usuario u : usuarios)
					{
						System.out.println(u.getNombre() + " " + u.getApellido());
					}
					
					
				}
				catch (Exception e)
				{
					System.out.println(e.getMessage());
				}
				
			}
			else //Sino fue invocado por el servidor, estoy pidiendo la lista de usuarios
			{
				try 
				{
					//Envio un mensaje de peticion de la lista de usuarios
					cliente.getOutput().writeObject(new MensajeComando("obtener_usuarios",0));
					cliente.getOutput().flush();
					
					//Cuando el servidor la reciba, devolvera un mensaje "obtener_usuarios_conectados" y luego un objeto lista
					//Ese objeto lista es interpretado como "invocadoPorServidor"
				} 
				catch (Exception e) 
				{
					System.out.println(e.getMessage());
				}
				
			}

	}

	public MensajeComando getEstadoOperacion() {
		return estadoOperacion;
	}


	public void setEstadoOperacion(MensajeComando estadoOperacion) {
		this.estadoOperacion = estadoOperacion;
	}
	
	
}
